package day08.objectdemo.demo;

/**
 * 学生类，要求在外界最多创建十个对象，之后就不允许创建了。
 * 要想控制在外界创建对象的次数,那么构造器对外就不应该有权限,应该私有化
 * --> 外界就真的无法new对象了(在没有学习反射之前)
 * --> 需要提供一种手段/一个方法来创建十个它的对象
 * 问:
 *      这个方法定义在哪里?  必须定义在Student类的内部
 *      这个方法是什么方法?  必须是一个静态方法,而且访问权限是public
 *      这个方法返回值类型是什么? 返回值类型是Student,表示返回Student对象
 *
 * 要想控制次数,就需要计数创建对象的次数,需要计数器
 *
 *
 * @since 09:47
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Student {
    private String name;
    private int age;

    private static int count = 0;

    {
        count++;
    }

    private Student() {
    }

    private Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 无参方法,就用无参构造器new对象
    public static Student getStudentInstance() {
        if (count < 10) {
            // 创建对象十次以内,允许创建对象
            return new Student();
        }
        // 超出次数
        return null;
    }

    // 有参方法,就用有参构造器new对象
    public static Student getStudentInstance(String name, int age) {
        if (count < 10) {
            // 创建对象十次以内,允许创建对象
            return new Student(name, age);
        }
        // 超出次数
        return null;
    }

    public String print() {
        return "{Student: name = " + name + ", age = " + age;
    }
}
